package gui.funcionario;

import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JComboBox;
import javax.swing.JPasswordField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.Color;
import javax.swing.DefaultComboBoxModel;
import entidade.Funcionario;
import entidade.Medico;
import entidade.Tecnico;
import javax.swing.JTextArea;
import javax.swing.JSeparator;
import javax.swing.border.LineBorder;
import javax.swing.border.EtchedBorder;
import persistencia.repositorio.RepositorioFuncionario;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class PanelFuncionarioCadastro extends JPanel {

	// atributos
	private JTextField textNomeFuncionario;
	private JTextField textCpfFuncionario;
	private JTextField textRgFuncionario;
	private JPasswordField passwdFuncionario;
	private JTextField textRuaFuncionario;
	private JTextField textNumeroCCasaFuncionario;
	private JTextField textBairroFuncionario;
	private JTextField textCidadeFuncionario;
	private JTextField textCepCidadeFuncionario;
	private JLabel labelCpfInvalido;
	private JLabel labelCepInvalido;
	private JTextField textEspecialidadeFuncionario;
	private JTextField textGraduacaoFuncionario;
	private JTextField textUniversidade;
	private JPanel panelInformacoesProfisssionais;
	private JTextField textDepartamentoFuncionario;
	private JComboBox comboCargoFuncionario;
	private JLabel labelEspecialidade;
	private JPanel panelPrincipal;
	private JPanel panelAbas;
	private JPanel panelInformacoesPessoais;
	private JPanel panelEndereco;
	private JFormattedTextField textIdFuncionario;
	private JTabbedPane panelInfoPessoais;
	private JButton button;
	private JComboBox comboBoxSexo;
	private JFormattedTextField textSalarioFuncionario;
	private JComboBox comboEstadoFuncionario;
	private JTextField textEmailFuncionario;
	private JTextField textTelefoneFuncionario;
	private JTextField textCelularFuncionario;
	private JLabel lblAreaDeFormao;
	private JTextField textAreaFormacao;
	private JLabel lblEscola;
	private JTextField textEscola;
	private JLabel lblExperiinciasAnteriores;
	private JLabel lblAnoDdeFormao;
	private JTextArea textAreaExperienciaMedico;
	private JTextArea textAreaExperienciaTecnico;
	private JLabel label_1;
	private JPanel panelInformacoesTecnicas;
	private JLabel labelFotoFuncionario;
	private JFormattedTextField textAnoFormacao;
	private JLabel labelSenhaInvalida;
	private JLabel labelRgInvalido;
	private JLabel labelSalarioInvalido;
	private JLabel labelNomeVazio;
	
	// construtor
	public PanelFuncionarioCadastro() {
		
		setSize(new Dimension(1000, 600));
		setLayout(null);

		//Panel onde todos os componentes estão contidos
		panelPrincipal = new JPanel();
		panelPrincipal.setSize(new Dimension(1000, 600));
		panelPrincipal.setBounds(12, 12, 976, 576);
		add(panelPrincipal);
		panelPrincipal.setLayout(null);

		//Label que indica qual funcionalidade está sendo executada
		JLabel labelFuncionalidade = new JLabel("CADASTRO");//neste caso Cadastro
		labelFuncionalidade.setFont(new Font("Dialog", Font.BOLD, 36));
		labelFuncionalidade.setHorizontalAlignment(SwingConstants.CENTER);
		labelFuncionalidade.setBounds(12, 12, 952, 85);
		panelPrincipal.add(labelFuncionalidade);

		//Panel responsável por exibir as abas com informações sobre o Funcionário
		panelAbas = new JPanel();
		panelAbas.setBounds(12, 109, 952, 467);
		panelPrincipal.add(panelAbas);
		panelAbas.setLayout(null);

		panelInfoPessoais = new JTabbedPane(JTabbedPane.TOP);
		panelInfoPessoais.setBounds(12, 12, 928, 417);
		panelAbas.add(panelInfoPessoais);
//Panel contendo as informações básicas do funcionário
		panelInformacoesPessoais = new JPanel();
		panelInfoPessoais.addTab("Informações Pessoais", null,panelInformacoesPessoais, null);
		panelInformacoesPessoais.setLayout(null);

		JLabel lblNewLabel_1 = new JLabel("Nome.:");
		lblNewLabel_1.setFont(new Font("Dialog", Font.BOLD, 15));
		lblNewLabel_1.setBounds(12, 12, 70, 29);
		panelInformacoesPessoais.add(lblNewLabel_1);

		textNomeFuncionario = new JTextField();
		textNomeFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textNomeFuncionario.setBounds(98, 12, 586, 29);
		panelInformacoesPessoais.add(textNomeFuncionario);
		textNomeFuncionario.setColumns(10);

		textIdFuncionario = new JFormattedTextField();
		textIdFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textIdFuncionario.setBounds(254, 233, 153, 29);
		panelInformacoesPessoais.add(textIdFuncionario);

		labelCpfInvalido = new JLabel("");
		labelCpfInvalido.setForeground(Color.RED);
		labelCpfInvalido.setBounds(98, 97, 153, 15);
		panelInformacoesPessoais.add(labelCpfInvalido);

		textCpfFuncionario = new JTextField();
		textCpfFuncionario.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				if (textCpfFuncionario.getText().length() > 11) {
					labelCpfInvalido.setText("CPF Inválido!");					
				}else {
					labelCpfInvalido.setText("");
				}
				textIdFuncionario.setText(textCpfFuncionario.getText());
			}
		});

		textCpfFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textCpfFuncionario.setColumns(10);
		textCpfFuncionario.setBounds(98, 64, 153, 29);
		panelInformacoesPessoais.add(textCpfFuncionario);

		JLabel lblCpf = new JLabel("CPF.:");
		lblCpf.setFont(new Font("Dialog", Font.BOLD, 15));
		lblCpf.setBounds(22, 64, 44, 29);
		panelInformacoesPessoais.add(lblCpf);

		JLabel lblRg = new JLabel("RG.:");
		lblRg.setFont(new Font("Dialog", Font.BOLD, 15));
		lblRg.setBounds(285, 66, 44, 29);
		panelInformacoesPessoais.add(lblRg);

		textRgFuncionario = new JTextField();
		textRgFuncionario.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				labelRgInvalido.setText("");
			}
		});

		textRgFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textRgFuncionario.setColumns(10);
		textRgFuncionario.setBounds(332, 64, 153, 29);
		panelInformacoesPessoais.add(textRgFuncionario);

		//corrigir essa parte da foto
		button = new JButton("Foto Aqui");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				try {

					JFileChooser foto = new JFileChooser();
					// foto.setCurrentDirectory(new File());
					foto.setDialogTitle("Carregar foto do cliente!");
					foto.showOpenDialog(PanelFuncionarioCadastro.this);
					labelFotoFuncionario.setIcon(new ImageIcon(foto
							.getSelectedFile().getPath()));

				} catch (Exception ex) {

					JOptionPane.showMessageDialog(
							PanelFuncionarioCadastro.this,
							"Imagem não carregada", "Imagem não carregada!",
							JOptionPane.INFORMATION_MESSAGE);
				}
			}
		});
		
		button.setBounds(744, 154, 112, 29);
		panelInformacoesPessoais.add(button);

		JLabel lblSalario = new JLabel("Salário.:");
		lblSalario.setFont(new Font("Dialog", Font.BOLD, 15));
		lblSalario.setBounds(22, 124, 92, 29);
		panelInformacoesPessoais.add(lblSalario);

		textSalarioFuncionario = new JFormattedTextField();
		textSalarioFuncionario.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				labelSalarioInvalido.setText("");
			}
		});
		textSalarioFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textSalarioFuncionario.setBounds(98, 124, 153, 29);
		panelInformacoesPessoais.add(textSalarioFuncionario);

		JLabel lblCargo = new JLabel("Cargo.:");
		lblCargo.setFont(new Font("Dialog", Font.BOLD, 15));
		lblCargo.setBounds(285, 124, 92, 29);
		panelInformacoesPessoais.add(lblCargo);

		comboCargoFuncionario = new JComboBox();
		//Action responsável pela exibição dos paineis de infoTecnicas e infoProfissionais
				
		comboCargoFuncionario.setModel(new DefaultComboBoxModel(
				new String[] { "---------", "Médico", "Técnico",
						"Recepcionista", "Almoxarife" }));
		comboCargoFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		comboCargoFuncionario.setBounds(372, 126, 187, 27);
		panelInformacoesPessoais.add(comboCargoFuncionario);

		JLabel lblId = new JLabel("ID.:");
		lblId.setFont(new Font("Dialog", Font.BOLD, 15));
		lblId.setBounds(217, 235, 30, 29);
		panelInformacoesPessoais.add(lblId);

		JLabel lblSsenha = new JLabel("Senha.:");
		lblSsenha.setFont(new Font("Dialog", Font.BOLD, 15));
		lblSsenha.setBounds(180, 276, 70, 29);
		panelInformacoesPessoais.add(lblSsenha);

		passwdFuncionario = new JPasswordField();
		passwdFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		passwdFuncionario.setBounds(254, 274, 153, 29);
		panelInformacoesPessoais.add(passwdFuncionario);

		JLabel lblSexo = new JLabel("Sexo.:");
		lblSexo.setFont(new Font("Dialog", Font.BOLD, 15));
		lblSexo.setBounds(505, 66, 54, 29);
		panelInformacoesPessoais.add(lblSexo);

		comboBoxSexo = new JComboBox();
		comboBoxSexo.setModel(new DefaultComboBoxModel(new String[] { "---","M", "F" }));
		comboBoxSexo.setFont(new Font("Dialog", Font.BOLD, 20));
		comboBoxSexo.setBounds(560, 65, 70, 27);
		panelInformacoesPessoais.add(comboBoxSexo);

		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(12, 194, 875, 2);
		panelInformacoesPessoais.add(separator_1);

		labelFotoFuncionario = new JLabel("");
		labelFotoFuncionario.setBorder(new EtchedBorder(EtchedBorder.LOWERED,
				null, null));
		labelFotoFuncionario.setSize(new Dimension(3, 4));
		labelFotoFuncionario.setBounds(752, 37, 93, 106);
		panelInformacoesPessoais.add(labelFotoFuncionario);
		
		labelNomeVazio = new JLabel("");
		labelNomeVazio.setForeground(Color.RED);
		labelNomeVazio.setBounds(98, 37, 153, 15);
		panelInformacoesPessoais.add(labelNomeVazio);
		
		labelRgInvalido = new JLabel("");
		labelRgInvalido.setForeground(Color.RED);
		labelRgInvalido.setBounds(332, 97, 153, 15);
		panelInformacoesPessoais.add(labelRgInvalido);
		
		labelSalarioInvalido = new JLabel("");
		labelSalarioInvalido.setForeground(Color.RED);
		labelSalarioInvalido.setBounds(98, 154, 153, 15);
		panelInformacoesPessoais.add(labelSalarioInvalido);
		
		labelSenhaInvalida = new JLabel("");
		labelSenhaInvalida.setForeground(Color.RED);
		labelSenhaInvalida.setBounds(254, 302, 153, 15);
		panelInformacoesPessoais.add(labelSenhaInvalida);
		
//Panel contendo as informações de endereço do funcionário
		panelEndereco = new JPanel();
		panelInfoPessoais.addTab("Endereço", null, panelEndereco, null);
		panelEndereco.setLayout(null);

		JLabel lblRua = new JLabel("Rua.:");
		lblRua.setBounds(12, 12, 70, 29);
		lblRua.setFont(new Font("Dialog", Font.BOLD, 15));
		panelEndereco.add(lblRua);

		textRuaFuncionario = new JTextField();
		textRuaFuncionario.setBounds(66, 12, 544, 29);
		textRuaFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textRuaFuncionario.setColumns(10);
		panelEndereco.add(textRuaFuncionario);

		JLabel lblN = new JLabel("Nº");
		lblN.setBounds(12, 53, 32, 29);
		lblN.setFont(new Font("Dialog", Font.BOLD, 15));
		panelEndereco.add(lblN);

		textNumeroCCasaFuncionario = new JTextField();
		textNumeroCCasaFuncionario.setBounds(66, 53, 46, 29);
		textNumeroCCasaFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textNumeroCCasaFuncionario.setColumns(10);
		panelEndereco.add(textNumeroCCasaFuncionario);

		JLabel lblBairro = new JLabel("Bairro.:");
		lblBairro.setBounds(144, 53, 70, 29);
		lblBairro.setFont(new Font("Dialog", Font.BOLD, 15));
		panelEndereco.add(lblBairro);

		textBairroFuncionario = new JTextField();
		textBairroFuncionario.setBounds(211, 53, 273, 29);
		textBairroFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textBairroFuncionario.setColumns(10);
		panelEndereco.add(textBairroFuncionario);

		JLabel lblEstado = new JLabel("Estado.:");
		lblEstado.setBounds(12, 122, 70, 29);
		lblEstado.setFont(new Font("Dialog", Font.BOLD, 15));
		panelEndereco.add(lblEstado);

		comboEstadoFuncionario = new JComboBox();
		comboEstadoFuncionario.setModel(new DefaultComboBoxModel(new String[] {
				"---", "AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO",
				"MA", "MG", "MS", "MT", "PA", "PB", "PE", "PI", "PR", "RJ",
				"RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO" }));
		comboEstadoFuncionario.setBounds(100, 122, 129, 27);
		panelEndereco.add(comboEstadoFuncionario);

		JLabel lblCidade = new JLabel("Cidade.:");
		lblCidade.setBounds(258, 122, 70, 29);
		lblCidade.setFont(new Font("Dialog", Font.BOLD, 15));
		panelEndereco.add(lblCidade);

		textCidadeFuncionario = new JTextField();
		textCidadeFuncionario.setBounds(331, 122, 146, 29);
		textCidadeFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textCidadeFuncionario.setColumns(10);
		panelEndereco.add(textCidadeFuncionario);

		JLabel lblCep = new JLabel("CEP.:");
		lblCep.setBounds(282, 166, 46, 29);
		lblCep.setFont(new Font("Dialog", Font.BOLD, 15));
		panelEndereco.add(lblCep);

		labelCepInvalido = new JLabel("");
		labelCepInvalido.setBounds(331, 194, 146, 15);
		labelCepInvalido.setForeground(Color.RED);
		panelEndereco.add(labelCepInvalido);

		textCepCidadeFuncionario = new JTextField();
		textCepCidadeFuncionario.setBounds(330, 164, 146, 29);
		textCepCidadeFuncionario.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				if (textCepCidadeFuncionario.getText().length() > 8) {
					labelCepInvalido.setText("CEP Inválido!");
				} else {
					labelCepInvalido.setText("");
				}
			}
		});
		textCepCidadeFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textCepCidadeFuncionario.setColumns(10);
		panelEndereco.add(textCepCidadeFuncionario);

		//Panel contendo as informações de contato do funcionário	
		JTabbedPane tabbedContato = new JTabbedPane(JTabbedPane.TOP);
		tabbedContato.setBounds(12, 202, 899, 176);
		panelEndereco.add(tabbedContato);

		JPanel panelInformacoesContato = new JPanel();
		tabbedContato.addTab("Contato", null, panelInformacoesContato, null);
		panelInformacoesContato.setLayout(null);

		JLabel lblEmail = new JLabel("Email.:");
		lblEmail.setFont(new Font("Dialog", Font.BOLD, 15));
		lblEmail.setBounds(46, 14, 56, 29);
		panelInformacoesContato.add(lblEmail);

		textEmailFuncionario = new JTextField();
		textEmailFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textEmailFuncionario.setColumns(10);
		textEmailFuncionario.setBounds(113, 12, 443, 29);
		panelInformacoesContato.add(textEmailFuncionario);

		JLabel lblTelefone = new JLabel("Telefone.:");
		lblTelefone.setFont(new Font("Dialog", Font.BOLD, 15));
		lblTelefone.setBounds(12, 55, 96, 29);
		panelInformacoesContato.add(lblTelefone);

		textTelefoneFuncionario = new JTextField();
		textTelefoneFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textTelefoneFuncionario.setColumns(10);
		textTelefoneFuncionario.setBounds(113, 53, 174, 29);
		panelInformacoesContato.add(textTelefoneFuncionario);

		JLabel lblCelular = new JLabel("Celular.:");
		lblCelular.setFont(new Font("Dialog", Font.BOLD, 15));
		lblCelular.setBounds(12, 93, 96, 29);
		panelInformacoesContato.add(lblCelular);

		textCelularFuncionario = new JTextField();
		textCelularFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textCelularFuncionario.setColumns(10);
		textCelularFuncionario.setBounds(113, 91, 174, 29);
		panelInformacoesContato.add(textCelularFuncionario);
		
//Panel contendo as informações técnicas do funcionário(caso ele seja um técnico)
		panelInformacoesTecnicas = new JPanel();
		panelInfoPessoais.addTab("Informações Tecnicas", null,panelInformacoesTecnicas, null);
		panelInformacoesTecnicas.setLayout(null);
		
		lblAreaDeFormao = new JLabel("Area de Formação.:");
		lblAreaDeFormao.setFont(new Font("Dialog", Font.BOLD, 15));
		lblAreaDeFormao.setBounds(37, 26, 173, 29);
		panelInformacoesTecnicas.add(lblAreaDeFormao);

		textAreaFormacao = new JTextField();
		textAreaFormacao.setFont(new Font("Dialog", Font.PLAIN, 20));
		textAreaFormacao.setColumns(10);
		textAreaFormacao.setBounds(228, 24, 421, 29);
		panelInformacoesTecnicas.add(textAreaFormacao);

		lblEscola = new JLabel("Escola.:");
		lblEscola.setFont(new Font("Dialog", Font.BOLD, 15));
		lblEscola.setBounds(138, 67, 72, 29);
		panelInformacoesTecnicas.add(lblEscola);

		textEscola = new JTextField();
		textEscola.setFont(new Font("Dialog", Font.PLAIN, 20));
		textEscola.setColumns(10);
		textEscola.setBounds(228, 72, 421, 29);
		panelInformacoesTecnicas.add(textEscola);

		textAreaExperienciaTecnico = new JTextArea();
		textAreaExperienciaTecnico.setFont(new Font("Monospaced", Font.PLAIN, 17));
		textAreaExperienciaTecnico
				.setBorder(new LineBorder(new Color(0, 0, 0)));
		textAreaExperienciaTecnico.setBounds(149, 189, 579, 130);
		panelInformacoesTecnicas.add(textAreaExperienciaTecnico);

		label_1 = new JLabel("Experiiências Anteriores");
		label_1.setFont(new Font("Dialog", Font.BOLD, 15));
		label_1.setBounds(36, 148, 209, 29);
		panelInformacoesTecnicas.add(label_1);

		JSeparator separator_3 = new JSeparator();
		separator_3.setBounds(37, 113, 738, 2);
		panelInformacoesTecnicas.add(separator_3);

//Panel contendo as informações profissionais do funcionário(caso ele seja um 		
		panelInformacoesProfisssionais = new JPanel();
		panelInformacoesProfisssionais.setLayout(null);
		panelInfoPessoais.addTab("Informações Profissionais", null,
		panelInformacoesProfisssionais, null);

		labelEspecialidade = new JLabel("Especialidade.:");
		labelEspecialidade.setVisible(false);
		labelEspecialidade.setFont(new Font("Dialog", Font.BOLD, 15));
		labelEspecialidade.setBounds(22, 156, 125, 29);
		panelInformacoesProfisssionais.add(labelEspecialidade);

		textEspecialidadeFuncionario = new JTextField();
		textEspecialidadeFuncionario.setVisible(false);
		textEspecialidadeFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textEspecialidadeFuncionario.setColumns(10);
		textEspecialidadeFuncionario.setBounds(165, 156, 421, 29);
		panelInformacoesProfisssionais.add(textEspecialidadeFuncionario);

		JLabel lblGraduao = new JLabel("Graduação.:");
		lblGraduao.setFont(new Font("Dialog", Font.BOLD, 15));
		lblGraduao.setBounds(36, 14, 111, 29);
		panelInformacoesProfisssionais.add(lblGraduao);

		textGraduacaoFuncionario = new JTextField();
		textGraduacaoFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textGraduacaoFuncionario.setColumns(10);
		textGraduacaoFuncionario.setBounds(165, 14, 421, 29);
		panelInformacoesProfisssionais.add(textGraduacaoFuncionario);

		JLabel lblUniversidade = new JLabel("Universidade.:");
		lblUniversidade.setFont(new Font("Dialog", Font.BOLD, 15));
		lblUniversidade.setBounds(22, 55, 125, 29);
		panelInformacoesProfisssionais.add(lblUniversidade);

		textUniversidade = new JTextField();
		textUniversidade.setFont(new Font("Dialog", Font.PLAIN, 20));
		textUniversidade.setColumns(10);
		textUniversidade.setBounds(165, 55, 423, 29);
		panelInformacoesProfisssionais.add(textUniversidade);

		JLabel lblDepartamento = new JLabel("Departamento.:");
		lblDepartamento.setFont(new Font("Dialog", Font.BOLD, 15));
		lblDepartamento.setBounds(12, 111, 137, 29);
		panelInformacoesProfisssionais.add(lblDepartamento);

		textDepartamentoFuncionario = new JTextField();
		textDepartamentoFuncionario.setFont(new Font("Dialog", Font.PLAIN, 20));
		textDepartamentoFuncionario.setColumns(10);
		textDepartamentoFuncionario.setBounds(165, 111, 423, 29);
		panelInformacoesProfisssionais.add(textDepartamentoFuncionario);

		lblExperiinciasAnteriores = new JLabel("Experiiências Anteriores");
		lblExperiinciasAnteriores.setFont(new Font("Dialog", Font.BOLD, 15));
		lblExperiinciasAnteriores.setBounds(12, 207, 209, 29);
		panelInformacoesProfisssionais.add(lblExperiinciasAnteriores);

		JSeparator separator = new JSeparator();
		separator.setBounds(32, 196, 801, 2);
		panelInformacoesProfisssionais.add(separator);

		lblAnoDdeFormao = new JLabel("Ano de Formação.:");
		lblAnoDdeFormao.setFont(new Font("Dialog", Font.BOLD, 15));
		lblAnoDdeFormao.setBounds(604, 14, 155, 29);
		panelInformacoesProfisssionais.add(lblAnoDdeFormao);

		textAnoFormacao = new JFormattedTextField();
		textAnoFormacao.setFont(new Font("Dialog", Font.PLAIN, 20));
		textAnoFormacao.setBounds(774, 14, 125, 29);
		panelInformacoesProfisssionais.add(textAnoFormacao);

		textAreaExperienciaMedico = new JTextArea();
		textAreaExperienciaMedico.setFont(new Font("Monospaced", Font.PLAIN, 17));
		textAreaExperienciaMedico.setBorder(new LineBorder(new Color(0, 0, 0)));
		textAreaExperienciaMedico.setBounds(125, 248, 579, 130);
		panelInformacoesProfisssionais.add(textAreaExperienciaMedico);

	}//Fim do construtor

	
//MÉTODOS
	
	
	public JTextField getTextNomeFuncionario() {
		return textNomeFuncionario;
	}


	public void setTextNomeFuncionario(String string) {
		this.textNomeFuncionario.setText(string);
	}


	public JTextField getTextCpfFuncionario() {
		return textCpfFuncionario;
	}


	public void setTextCpfFuncionario(JTextField textCpfFuncionario) {
		this.textCpfFuncionario = textCpfFuncionario;
	}


	public JTextField getTextRgFuncionario() {
		return textRgFuncionario;
	}


	public void setTextRgFuncionario(JTextField textRgFuncionario) {
		this.textRgFuncionario = textRgFuncionario;
	}


	public JPasswordField getPasswdFuncionario() {
		return passwdFuncionario;
	}


	public void setPasswdFuncionario(JPasswordField passwdFuncionario) {
		this.passwdFuncionario = passwdFuncionario;
	}


	public JTextField getTextRuaFuncionario() {
		return textRuaFuncionario;
	}


	public void setTextRuaFuncionario(JTextField textRuaFuncionario) {
		this.textRuaFuncionario = textRuaFuncionario;
	}


	public JTextField getTextNumeroCCasaFuncionario() {
		return textNumeroCCasaFuncionario;
	}


	public void setTextNumeroCCasaFuncionario(JTextField textNumeroCCasaFuncionario) {
		this.textNumeroCCasaFuncionario = textNumeroCCasaFuncionario;
	}


	public JTextField getTextBairroFuncionario() {
		return textBairroFuncionario;
	}


	public void setTextBairroFuncionario(JTextField textBairroFuncionario) {
		this.textBairroFuncionario = textBairroFuncionario;
	}


	public JTextField getTextCidadeFuncionario() {
		return textCidadeFuncionario;
	}


	public void setTextCidadeFuncionario(JTextField textCidadeFuncionario) {
		this.textCidadeFuncionario = textCidadeFuncionario;
	}


	public JTextField getTextCepCidadeFuncionario() {
		return textCepCidadeFuncionario;
	}


	public void setTextCepCidadeFuncionario(JTextField textCepCidadeFuncionario) {
		this.textCepCidadeFuncionario = textCepCidadeFuncionario;
	}


	public JTextField getTextEspecialidadeFuncionario() {
		return textEspecialidadeFuncionario;
	}


	public void setTextEspecialidadeFuncionario(
			JTextField textEspecialidadeFuncionario) {
		this.textEspecialidadeFuncionario = textEspecialidadeFuncionario;
	}


	public JTextField getTextGraduacaoFuncionario() {
		return textGraduacaoFuncionario;
	}


	public void setTextGraduacaoFuncionario(JTextField textGraduacaoFuncionario) {
		this.textGraduacaoFuncionario = textGraduacaoFuncionario;
	}


	public JTextField getTextUniversidade() {
		return textUniversidade;
	}


	public void setTextUniversidade(JTextField textUniversidade) {
		this.textUniversidade = textUniversidade;
	}


	public JPanel getPanelInformacoesProfisssionais() {
		return panelInformacoesProfisssionais;
	}


	public void setPanelInformacoesProfisssionais(
			JPanel panelInformacoesProfisssionais) {
		this.panelInformacoesProfisssionais = panelInformacoesProfisssionais;
	}


	public JTextField getTextDepartamentoFuncionario() {
		return textDepartamentoFuncionario;
	}


	public void setTextDepartamentoFuncionario(
			JTextField textDepartamentoFuncionario) {
		this.textDepartamentoFuncionario = textDepartamentoFuncionario;
	}


	public JComboBox getComboCargoFuncionario() {
		return comboCargoFuncionario;
	}


	public void setComboCargoFuncionario(JComboBox comboCargoFuncionario) {
		this.comboCargoFuncionario = comboCargoFuncionario;
	}


	public JPanel getPanelPrincipal() {
		return panelPrincipal;
	}


	public void setPanelPrincipal(JPanel panelPrincipal) {
		this.panelPrincipal = panelPrincipal;
	}


	public JPanel getPanelAbas() {
		return panelAbas;
	}


	public void setPanelAbas(JPanel panelAbas) {
		this.panelAbas = panelAbas;
	}


	public JPanel getPanelInformacoesPessoais() {
		return panelInformacoesPessoais;
	}


	public void setPanelInformacoesPessoais(JPanel panelInformacoesPessoais) {
		this.panelInformacoesPessoais = panelInformacoesPessoais;
	}


	public JPanel getPanelEndereco() {
		return panelEndereco;
	}


	public void setPanelEndereco(JPanel panelEndereco) {
		this.panelEndereco = panelEndereco;
	}


	public JFormattedTextField getTextIdFuncionario() {
		return textIdFuncionario;
	}


	public void setTextIdFuncionario(JFormattedTextField textIdFuncionario) {
		this.textIdFuncionario = textIdFuncionario;
	}


	public JTabbedPane getPanelInfoPessoais() {
		return panelInfoPessoais;
	}


	public void setPanelInfoPessoais(JTabbedPane panelInfoPessoais) {
		this.panelInfoPessoais = panelInfoPessoais;
	}


	public JComboBox getComboBoxSexo() {
		return comboBoxSexo;
	}


	public void setComboBoxSexo(JComboBox comboBoxSexo) {
		this.comboBoxSexo = comboBoxSexo;
	}


	public JFormattedTextField getTextSalarioFuncionario() {
		return textSalarioFuncionario;
	}


	public void setTextSalarioFuncionario(JFormattedTextField textSalarioFuncionario) {
		this.textSalarioFuncionario = textSalarioFuncionario;
	}


	public JComboBox getComboEstadoFuncionario() {
		return comboEstadoFuncionario;
	}


	public void setComboEstadoFuncionario(JComboBox comboEstadoFuncionario) {
		this.comboEstadoFuncionario = comboEstadoFuncionario;
	}

	public JTextField getTextEmailFuncionario() {
		return textEmailFuncionario;
	}


	public void setTextEmailFuncionario(JTextField textEmailFuncionario) {
		this.textEmailFuncionario = textEmailFuncionario;
	}


	public JTextField getTextTelefoneFuncionario() {
		return textTelefoneFuncionario;
	}


	public void setTextTelefoneFuncionario(JTextField textTelefoneFuncionario) {
		this.textTelefoneFuncionario = textTelefoneFuncionario;
	}


	public JTextField getTextCelularFuncionario() {
		return textCelularFuncionario;
	}


	public void setTextCelularFuncionario(JTextField textCelularFuncionario) {
		this.textCelularFuncionario = textCelularFuncionario;
	}


	public JTextField getTextAreaFormacao() {
		return textAreaFormacao;
	}


	public void setTextAreaFormacao(JTextField textAreaFormacao) {
		this.textAreaFormacao = textAreaFormacao;
	}


	public JTextField getTextEscola() {
		return textEscola;
	}


	public void setTextEscola(JTextField textEscola) {
		this.textEscola = textEscola;
	}


	public JTextArea getTextAreaExperienciaMedico() {
		return textAreaExperienciaMedico;
	}


	public void setTextAreaExperienciaMedico(JTextArea textAreaExperienciaMedico) {
		this.textAreaExperienciaMedico = textAreaExperienciaMedico;
	}


	public JTextArea getTextAreaExperienciaTecnico() {
		return textAreaExperienciaTecnico;
	}


	public void setTextAreaExperienciaTecnico(JTextArea textAreaExperienciaTecnico) {
		this.textAreaExperienciaTecnico = textAreaExperienciaTecnico;
	}


	public JPanel getPanelInformacoesTecnicas() {
		return panelInformacoesTecnicas;
	}


	public void setPanelInformacoesTecnicas(JPanel panelInformacoesTecnicas) {
		this.panelInformacoesTecnicas = panelInformacoesTecnicas;
	}


	public JFormattedTextField getTextAnoFormacao() {
		return textAnoFormacao;
	}


	public void setTextAnoFormacao(JFormattedTextField textAnoFormacao) {
		this.textAnoFormacao = textAnoFormacao;
	}


	/**
	 * Método responsável por fazer uma verificação do cpf digitado
	 * @param cpf O CPF à ser verificado
	 * @return resposta Retorna true caso o CPF for válido
	 */
	private boolean verificarCPF(String cpf){
		
		boolean resposta = true;
		
		//Se o CPF contiver letras
		if(verificaIsLetra(cpf) == true){
			JOptionPane.showMessageDialog(PanelFuncionarioCadastro.this,
					"CPF Inválido!", "CPF Inválido!",
					JOptionPane.WARNING_MESSAGE);
			resposta = false;
		}
		//Se o CPF for vazio
		if(cpf.equals("")){
			labelCpfInvalido.setText("Digite o CPF");
			resposta = false;
		}		
		return resposta; 
	}
	
	/**
	 * Método responsável por verificar se existe uma letra em uma String numérica
	 * @param stringNumerica String à ser verificada
	 * @return resposta Retorna true caso encontre alguma letra
	 */
	private boolean verificaIsLetra(String stringNumerica) {
		
		boolean resposta = false;
		
		//Percorrer toda a String
		for (int i = 0; i < stringNumerica.length(); i++) {
			//Verificar se o caracter é uma letra
			if (Character.isLetter(stringNumerica.charAt(i)) == true) {
				return true;
			}
		}
		return resposta;
	}

	/**
	 * Método responsável por fazer uma verificação do rg digitado
	 * @param rg String à ser verificada
	 * @return resposta Retorna true caso o Rg não seja vazio
	 */
	private boolean verificarRG(String rg){
		
		boolean resposta = true;
		
		//Se o RG for vazio
		if(rg.equals("")){
			labelRgInvalido.setText("RG Inválido!");
			resposta = false;
		}
		return resposta;
	}
	
	/**
	 * Método responsável por verificar e setar o sexo do Funcionário
	 * @param verifica Valor obtido do ComboBox
	 * @return sexo Sexo do Funcionário
	 */
	public static char verificaSexo(int verifica) {
		
		char sexo = 'n';
		if (verifica == 1){
			sexo = 'M';
		}else if (verifica == 2){
			sexo = 'F';
		}else if (verifica == 0){
			sexo = ' ';
		} 
		return sexo;
	}
	
	/**
	 * Método responsável por fazer a verificação do salário do funcionário
	 * @param salario String à ser verificada
	 * @return resposta Retorna true caso o salário seja válido
	 */
	private boolean verificarSalario(String salario){
		
		boolean resposta = true;
		
		//se o salario for vazio
		if(salario.equals("")){
			labelSalarioInvalido.setText("Informe um Salário!");
			resposta = false;
		}
		//se o salário nao for um valor real
		if(verificaIsNumero(salario) == false){
			resposta = false;
			labelSalarioInvalido.setText("Salário Inválido!");
		}
		return resposta;
	}
	
	/**
	 * Método responsável por verificar se a String salario pode ser convertida para Double
	 * @param salário String à ser verificado
	 * @return resposta Retorna true caso o salário seja do tipo Double
	 */
	@SuppressWarnings("finally")
	private boolean verificaIsNumero(String salario){
		
		boolean resposta = true;
		Double numTeste = null;
		
		try{
			numTeste = Double.parseDouble(salario);
			resposta = true;
		}catch (Exception e) {
			resposta = false;
		}finally{
			return resposta;
		}		
	}
	
	/**
	 * Método responsável por verificar se todos os campos obrigatórios estão preenchidos e são válidos
	 * @return resposta Retorna true caso todos os campos sejam válidos
	 */
	public boolean verificarTodosCampos(){
		
		boolean respA, respB, respC;
		
		respA = verificarCPF(textCpfFuncionario.getText());
		respB = verificarRG(textRgFuncionario.getText());
		respC = verificarSalario(textSalarioFuncionario.getText());
		
		return (respA && respB && respC);
	}
	
	/**
	 * Método responsável por limpar e setar para valores iniciais todos os camponetes desta classe
	 */
	private void limparTodosCampos() {
		
		textNomeFuncionario.setText("");
		textCpfFuncionario.setText("");
		textRgFuncionario.setText("");
		comboBoxSexo.setSelectedIndex(0);
		textSalarioFuncionario.setText("");
		comboCargoFuncionario.setSelectedIndex(0);

		textIdFuncionario.setText("");
		passwdFuncionario.setText("");

		textRuaFuncionario.setText("");
		textNumeroCCasaFuncionario.setText("");
		textBairroFuncionario.setText("");

		comboEstadoFuncionario.setSelectedIndex(0);
		textCidadeFuncionario.setText("");
		textCepCidadeFuncionario.setText("");

		textEmailFuncionario.setText("");
		textTelefoneFuncionario.setText("");
		textCelularFuncionario.setText("");

		textAreaFormacao.setText("");
		textEscola.setText("");
		
		textAreaExperienciaTecnico.setText("");

		textGraduacaoFuncionario.setText("");
		textUniversidade.setText("");
		textDepartamentoFuncionario.setText("");
		textEspecialidadeFuncionario.setText("");
		textAreaExperienciaMedico.setText("");
		
		textAnoFormacao.setText("");
		
		labelCepInvalido.setText("");
		labelCpfInvalido.setText("");
		labelNomeVazio.setText("");
		labelRgInvalido.setText("");
		labelSalarioInvalido.setText("");
		labelSenhaInvalida.setText("");
		
		//panelInformacoesPessoais.setVisible(true);
	}

	/**
	 *Método responsável por setar informações técnicas do novo funcionário  
	 */
	private void setarInformacoesTecnicas(Tecnico novo) {
		novo.setAreaFormacao(textAreaFormacao.getText());
		novo.setEscola(textEscola.getText());
		novo.setExperienciaAnterior(textAreaExperienciaTecnico.getText());
	}

	/**
	 *Método responsável por setar informações profissionais do novo funcionário  
	 */
	private void setarInformacoesProfissionais(Medico novo) {
		novo.setGraduacao(textGraduacaoFuncionario.getText());
		novo.setUniversidade(textUniversidade.getText());
		novo.setEspecialidade(textEspecialidadeFuncionario.getText());
		novo.setExperiencia(textAreaExperienciaMedico.getText());
		novo.setAnoFormacao(textAnoFormacao.getText());
	}

	/**
	 *Método responsável por setar informações Pessoais do novo funcionário  
	 */
	private void setarInformacoesPessoaisFuncionario(Funcionario novo) {
		// Nome
		novo.setNomeFuncionario(textNomeFuncionario.getText());
		// CPF
		novo.setCpfFuncionario(textCpfFuncionario.getText());
		// Rg
		novo.setRgFuncionario(textRgFuncionario.getText());
		// Salario
		novo.setSalarioFuncionario(Double.parseDouble(textSalarioFuncionario
				.getText()));
		// Cargo
		novo.setCargoFuncionario(comboCargoFuncionario.getSelectedItem()
				.toString());
		// Sexo
		novo.setSexoFuncionario(verificaSexo(comboBoxSexo.getSelectedIndex()));
		// Senha
		novo.setSenhaUsuarioFuncionario(passwdFuncionario.getSelectedText());
		// Bairro
		novo.getEnderecoFuncionario()
				.setBairro(textBairroFuncionario.getText());
		// Cep
		novo.getEnderecoFuncionario()
				.setCep(textCepCidadeFuncionario.getText());
		// Cidade
		novo.getEnderecoFuncionario()
				.setCidade(textCidadeFuncionario.getText());

		// Foto
		//novo.setFotoFuncionario(labelFotoFuncionario.getIcon());
		// Estado
		if (comboEstadoFuncionario.getSelectedItem().toString()
				.equalsIgnoreCase("---")) {
			novo.getEnderecoFuncionario().setEstado("");
		} else {
			novo.getEnderecoFuncionario().setEstado(
					comboEstadoFuncionario.getSelectedItem().toString());
		}
		// Numero
		novo.getEnderecoFuncionario().setNumero(textNumeroCCasaFuncionario.getText());
		// Rua
		novo.getEnderecoFuncionario().setRua(textRuaFuncionario.getText());
		// Email
		novo.setEmailFuncionario(textEmailFuncionario.getText());
		// Telefone
		novo.setTelefoneFuncionario(textTelefoneFuncionario.getText());
		// Celular
		novo.setCelularFuncionario(textCelularFuncionario.getText());
		// Departamento
		novo.setDepartamento(textDepartamentoFuncionario.getText());
		// Foto
		// ----------------persistir a foto		
	}
	
	public void salvar(){
		if(verificarTodosCampos() == true){
			
			//Escolhe o tipo de funcionario, instancia e persiste no banco de dados
			if (getComboCargoFuncionario().getSelectedIndex() == 1) {
				Medico novoM = new Medico();
				setarInformacoesPessoaisFuncionario(novoM);
				setarInformacoesProfissionais(novoM);
				RepositorioFuncionario.getInstanceRepositorioFuncionario().novo(novoM);
				JOptionPane.showMessageDialog(null, "Funcionário Cadastrado com Sucesso!");
				limparTodosCampos();
				setVisible(false);
			} else if (getComboCargoFuncionario().getSelectedIndex() == 2){
				Tecnico novoT = new Tecnico();
				setarInformacoesPessoaisFuncionario(novoT);
				setarInformacoesTecnicas(novoT);
				RepositorioFuncionario.getInstanceRepositorioFuncionario().novo(novoT);
				JOptionPane.showMessageDialog(null, "Funcionário Cadastrado com Sucesso!");
				limparTodosCampos();
				setVisible(false);
				
			} else if (getComboCargoFuncionario().getSelectedIndex() == 3) {
				Funcionario novoR = new Funcionario();
				setarInformacoesPessoaisFuncionario(novoR);
				RepositorioFuncionario.getInstanceRepositorioFuncionario().novo(novoR);
				JOptionPane.showMessageDialog(null, "Funcionário Cadastrado com Sucesso!");
				limparTodosCampos();
				setVisible(false);
				
			} else if (getComboCargoFuncionario().getSelectedIndex() == 4) {
				Funcionario novoA = new Funcionario();
				setarInformacoesPessoaisFuncionario(novoA);
				RepositorioFuncionario.getInstanceRepositorioFuncionario().novo(novoA);
				JOptionPane.showMessageDialog(null, "Funcionário Cadastrado com Sucesso!");
				limparTodosCampos();
				setVisible(false);
			}
		}
		
		
		
	}
		
	
	
	

}